[アップデート] Amazon S3のListBuckets APIがリージョンとバケット名のフィルタリングをサポートしました

[アップデート] Amazon S3のListBuckets APIがリージョンとバケット名のフィルタリングをサポートしました

Clock Icon2024.10.17

こんにちは。サービス開発室の武田です。

みんな大好きAmazon S3のListBuckets APIに、新しくリージョンとバケット名でフィルタリングできる機能が追加されました。

https://aws.amazon.com/jp/about-aws/whats-new/2024/10/amazon-s3-new-region-bucket-name-filtering-listbuckets-api/

サポートされるバージョン

Boto3およびAWS CLIでサポートされたバージョンです。またこれ以外のSDKについてはご使用のバージョン等ご確認ください。

  • Boto3: 1.35.42
  • AWS CLI v1: 1.35.8
  • AWS CLI v2: 2.18.8

やってみた

今回は私の環境でAWS CLI v2を試してみます。古いバージョンだったため最新バージョンにアップデートしました。

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html

$ aws --version
aws-cli/2.18.8 Python/3.12.6 Darwin/23.2.0 exe/x86_64

まずは普通にlist-bucketsを実行してみます。

$ aws s3api list-buckets
{
    "Buckets": [
        {
            "Name": "cdk-hnb659fds-assets-123456789012-ap-northeast-1",
            "CreationDate": "2023-04-04T09:19:32+00:00"
        },
        {
            "Name": "cm-cur-123456789012",
            "CreationDate": "2022-01-31T05:03:33+00:00"
        },
        {
            "Name": "cm-members-cloudtrail-123456789012",
            "CreationDate": "2024-10-11T17:10:01+00:00"
        },
        {
            "Name": "cm-members-config-123456789012",
            "CreationDate": "2024-10-11T17:09:55+00:00"
        },
        {
            "Name": "dynamodb-test-123456789012",
            "CreationDate": "2024-08-19T03:02:00+00:00"
        },
        {
            "Name": "test-bucket-123456789012",
            "CreationDate": "2024-09-05T01:37:06+00:00"
        },
        {
            "Name": "test-bucket-euw1-123456789012",
            "CreationDate": "2024-10-01T11:24:50+00:00"
        },
        {
            "Name": "test-bucket-use1-123456789012",
            "CreationDate": "2024-10-01T11:05:10+00:00"
        }
    ],
    "Owner": {
        "DisplayName": "classmethod-123456789012",
        "ID": "1234567890qwertyuiopasdfghjklzxcvbnm1qaz2wsx3edc4rfv5tgb6yhn7ujm"
    },
    "Prefix": null
}

レスポンスにPrefixが追加されていますね。以前はありませんでした。

続いて追加されたbucket-regionオプションを指定してみます。リージョンコードで指定する必要があり、今回はap-northeast-1を指定してみます。

$ aws s3api list-buckets --bucket-region ap-northeast-1
{
    "Buckets": [
        {
            "Name": "cdk-hnb659fds-assets-123456789012-ap-northeast-1",
            "CreationDate": "2023-04-04T09:19:32+00:00",
            "BucketRegion": "ap-northeast-1"
        },
        {
            "Name": "cm-cur-123456789012",
            "CreationDate": "2022-01-31T05:03:33+00:00",
            "BucketRegion": "ap-northeast-1"
        },
        {
            "Name": "cm-members-cloudtrail-123456789012",
            "CreationDate": "2024-10-11T17:10:01+00:00",
            "BucketRegion": "ap-northeast-1"
        },
        {
            "Name": "cm-members-config-123456789012",
            "CreationDate": "2024-10-11T17:09:55+00:00",
            "BucketRegion": "ap-northeast-1"
        },
        {
            "Name": "dynamodb-test-123456789012",
            "CreationDate": "2024-08-19T03:02:00+00:00",
            "BucketRegion": "ap-northeast-1"
        }
    ],
    "Owner": {
        "DisplayName": "classmethod-123456789012",
        "ID": "1234567890qwertyuiopasdfghjklzxcvbnm1qaz2wsx3edc4rfv5tgb6yhn7ujm"
    },
    "Prefix": null
}

Buckets[].BucketRegionが追加されています。bucket-regionを指定する場合の注意点ですが、指定する場合は エンドポイントのリージョンとそろえる 必要があります。たとえばエンドポイントがap-northeast-1でバケットリージョンをus-east-1にすると次のようにエラーになります。

$ aws s3api list-buckets --bucket-region us-east-1

An error occurred (InvalidArgument) when calling the ListBuckets operation: Requests with bucket-region specified must be made to the corresponding regional endpoint

この場合は、次のようにエンドポイントも指定すれば問題なく実行できます。

$ aws s3api list-buckets --region us-east-1 --bucket-region us-east-1
{
    "Buckets": [
        {
            "Name": "test-bucket-use1-123456789012",
            "CreationDate": "2024-10-01T11:05:10+00:00",
            "BucketRegion": "us-east-1"
        }
    ],
    "Owner": {
        "DisplayName": "classmethod-123456789012",
        "ID": "1234567890qwertyuiopasdfghjklzxcvbnm1qaz2wsx3edc4rfv5tgb6yhn7ujm"
    },
    "Prefix": null
}

もうひとつ追加されたバケット名でのフィルタリングも試してみましょう。

$ aws s3api list-buckets --prefix cm-
{
    "Buckets": [
        {
            "Name": "cm-cur-123456789012",
            "CreationDate": "2022-01-31T05:03:33+00:00",
            "BucketRegion": "ap-northeast-1"
        },
        {
            "Name": "cm-members-cloudtrail-123456789012",
            "CreationDate": "2024-10-11T17:10:01+00:00",
            "BucketRegion": "ap-northeast-1"
        },
        {
            "Name": "cm-members-config-123456789012",
            "CreationDate": "2024-10-11T17:09:55+00:00",
            "BucketRegion": "ap-northeast-1"
        }
    ],
    "Owner": {
        "DisplayName": "classmethod-123456789012",
        "ID": "1234567890qwertyuiopasdfghjklzxcvbnm1qaz2wsx3edc4rfv5tgb6yhn7ujm"
    },
    "Prefix": "cm-"
}

指定したcm-でフィルタリングされていますね。レスポンスのPrefixnullではなくcm-となっています。

最後にちょっとテクニカルですが、試していて気付いたことを紹介します。一番初めにlist-bucketsした際、バケットのリージョンが含まれていませんでした。場合によってはバケットのリージョンを知りたいケースがあり、これまでは別途HeadBucket APIを使用して調べる必要がありました。それが今後は不要になりそうです。

上記の結果で気付いたかわかりませんが、bucket-regionに限らずprefix指定でもレスポンスにBucketRegionが含まれています。そこでprefixに空文字列を指定したらどうなるでしょう?結果は次のようになります。

$ aws s3api list-buckets --prefix ""
{
    "Buckets": [
        {
            "Name": "cdk-hnb659fds-assets-123456789012-ap-northeast-1",
            "CreationDate": "2023-04-04T09:19:32+00:00",
            "BucketRegion": "ap-northeast-1"
        },
        {
            "Name": "cm-cur-123456789012",
            "CreationDate": "2022-01-31T05:03:33+00:00",
            "BucketRegion": "ap-northeast-1"
        },
        {
            "Name": "cm-members-cloudtrail-123456789012",
            "CreationDate": "2024-10-11T17:10:01+00:00",
            "BucketRegion": "ap-northeast-1"
        },
        {
            "Name": "cm-members-config-123456789012",
            "CreationDate": "2024-10-11T17:09:55+00:00",
            "BucketRegion": "ap-northeast-1"
        },
        {
            "Name": "dynamodb-test-123456789012",
            "CreationDate": "2024-08-19T03:02:00+00:00",
            "BucketRegion": "ap-northeast-1"
        },
        {
            "Name": "test-bucket-123456789012",
            "CreationDate": "2024-09-05T01:37:06+00:00",
            "BucketRegion": "ap-east-1"
        },
        {
            "Name": "test-bucket-euw1-123456789012",
            "CreationDate": "2024-10-01T11:24:50+00:00",
            "BucketRegion": "eu-west-1"
        },
        {
            "Name": "test-bucket-use1-123456789012",
            "CreationDate": "2024-10-01T11:05:10+00:00",
            "BucketRegion": "us-east-1"
        }
    ],
    "Owner": {
        "DisplayName": "classmethod-123456789012",
        "ID": "1234567890qwertyuiopasdfghjklzxcvbnm1qaz2wsx3edc4rfv5tgb6yhn7ujm"
    },
    "Prefix": ""
}

全バケットの一覧とともにリージョン名も含まれていますね!これは便利そうです!

まとめ

S3のListBuckets APIに新しいフィルタリングオプションが追加されました。これ自体便利ですし、個人的には結果一覧にリージョンを含められるのがとてもいいなと思いました。

それではよいS3ライフを。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.